package kitaplaner.application;

import java.sql.Connection;
import java.sql.Date;
import java.util.ArrayList;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import kitaplaner.database.Database;
import kitaplaner.database.Gruppe;
import kitaplaner.database.Kita;
import kitaplaner.database.Mitarbeiter;
import kitaplaner.database.Status;

/**
 *
 * @author kristina & yves
 */
public class MitarbeiterApp {
    Connection conn;
    Kita kita = new Kita();
    Database db = new Database();
    public MitarbeiterApp (Kita kita, Connection conn)
    {
        this.conn = conn;
        this.kita = kita;
    }

    
    public ArrayList<Mitarbeiter> getMitarbeiterByGroup(int gruppenID)
    {
       
        ArrayList<Mitarbeiter> maList = kita.getMa();
        ArrayList<Mitarbeiter> maListByGroup = new ArrayList();
        
        for (int i = 0; i < maList.size(); i++) {
            if (maList.get(i).getGrpID() == gruppenID) {
                maListByGroup.add(maList.get(i));
            }
        }
        
       return maListByGroup;
    }
    
    public Object [] createCompoboxText()
    {
        Object [] comboItems;

        ArrayList <Mitarbeiter> ma = kita.getMa();
        ArrayList <String> maNamens = new ArrayList<String>();

        for (int i = 0; i < ma.size(); i++)
        {
            maNamens.add(ma.get(i).getVorname()+" "+ma.get(i).getNachname());
        }
        comboItems = maNamens.toArray();

        return comboItems;
    }

    public Object [] createCompoboxLeiText()
    {
        Object [] comboItems;

        ArrayList <Mitarbeiter> ma = kita.getMa();
        ArrayList <String> maNamens = new ArrayList<String>();
        ArrayList <Status> status = kita.getStatus();
        int leitID = 0;

        for (int i = 0; i < status.size(); i++)
        {
            if (status.get(i).getName().equals("Leitung"))
            {
                leitID = status.get(i).getId();
            }
        }

        for (int i = 0; i < ma.size(); i++)
        {
            if (leitID == ma.get(i).getStatusID())
            maNamens.add(ma.get(i).getVorname()+" "+ma.get(i).getNachname());
        }
        comboItems = maNamens.toArray();

        return comboItems;
    }

    public Boolean deleteMaById(int id)
    {
        ArrayList <Mitarbeiter> alMa = kita.getMa();
        Boolean success = false;

        for (int i = 0; i < alMa.size(); i++)
        {
            if (alMa.get(i).getId() == id)
            {
                alMa.remove(i);
            }
        }
        conn = db.checkConnection(conn);
        success = db.deleteMA(conn, id);

        kita.setMa(alMa);

        return success;
    }

    public Mitarbeiter getMaById(int id)
    {
        Mitarbeiter ma = null;
        ArrayList <Mitarbeiter> alMa = kita.getMa();

        for (int i = 0; i < alMa.size(); i++)
        {
            if (alMa.get(i).getId() == id)
            {
                ma = alMa.get(i);
            }
        }

        return ma;
    }

    public Mitarbeiter getMaByName(String prename, String lastname)
    {
        Mitarbeiter ma = null;
        ArrayList <Mitarbeiter> alMa = kita.getMa();

        for (int i = 0; i < alMa.size(); i++)
        {
            if (alMa.get(i).getVorname().equals(prename)
             && alMa.get(i).getNachname().equals(lastname))
            {
                ma = alMa.get(i);
            }
        }

        return ma;
    }

    public Boolean insertIntoMA(String vorname, String nachname, String straße,
            String hnr, int plz, String stadt, String telefon, String email,
            double stdSoll, double urlSoll, int grpId, int statusId,
            double prep, double maBesp, Date gebDat)
    {
        Boolean success = false;

        Mitarbeiter ma = new Mitarbeiter();
        ma.setEmail(email);
        ma.setGebDatum(gebDat);
        ma.setGrpID(grpId);
        ma.setHausnummer(hnr);
        ma.setNachname(nachname);
        ma.setVorname(vorname);
        ma.setPlz(plz);
        ma.setStadt(stadt);
        ma.setStatusID(statusId);
        ma.setStdMABesprechung(maBesp);
        ma.setStdVorbereitung(prep);
        ma.setStdWocheSoll(stdSoll);
        ma.setStraße(straße);
        ma.setTelefon(telefon);
        ma.setUrlaubstageSoll(urlSoll);

        conn = db.checkConnection(conn);
        success = db.insertMa(conn, ma);
        conn = db.checkConnection(conn);
        kita.setMa(db.getMitarbeiter(conn));
        
        return success;
    }

    public Boolean changeMAEntry(int id, String vorname, String nachname, String straße,
            String hnr, int plz, String stadt, String telefon, String email,
            double stdSoll, double urlSoll, int grpId, int statusId,
            double prep, double maBesp, Date gebDat)
    {
        Boolean success = false;
        ArrayList <Mitarbeiter> alMa = kita.getMa();

        Mitarbeiter ma = new Mitarbeiter();
        for (int i = 0 ; i < alMa.size(); i++)
        {
            if (alMa.get(i).getId() == id)
            {
                ma = alMa.get(i);
                ma.setId(id);
                ma.setEmail(email);
                ma.setGebDatum(gebDat);
                ma.setGrpID(grpId);
                ma.setHausnummer(hnr);
                ma.setNachname(nachname);
                ma.setVorname(vorname);
                ma.setPlz(plz);
                ma.setStadt(stadt);
                ma.setStatusID(statusId);
                ma.setStdMABesprechung(maBesp);
                ma.setStdVorbereitung(prep);
                ma.setStdWocheSoll(stdSoll);
                ma.setStraße(straße);
                ma.setTelefon(telefon);
                ma.setUrlaubstageSoll(urlSoll);
            }
        }
        kita.setMa(alMa);
        conn = db.checkConnection(conn);
        success = db.changeMA(conn, ma);

        return success;
    }

    public DefaultTableModel createMaOverview()
    {
        String[] columnNames = {"Vorname", "Nachname", "Straße",
                                "Hausnummer", "PLZ", "Stadt", "Telefon",
                                "Email", "Geburtsdatum", "Std/Woche",
                                "Urlaubstage", "Gruppenname", "Status",
                                "Vorbereitung",
                                "MA Besprechung"};

        ArrayList <Mitarbeiter> maList = kita.getMa();
        DefaultTableModel model = new DefaultTableModel();
        conn = db.checkConnection(conn);
        GruppenApp grpApp = new GruppenApp(this.kita, conn);
        ArrayList <Gruppe> alGrp = new ArrayList <Gruppe>();
        JTable table = new JTable(model);

        //insert Columns
        for (int i = 0 ; i < columnNames.length; i++)
        {
            model.addColumn(columnNames[i]);
        }

        for (int i = 0; i < maList.size(); i++)
        {
            int grpId = maList.get(i).getGrpID();
            int staId = maList.get(i).getStatusID();
            StatusApp stApp = new StatusApp(this.kita, conn);

            Object []obj = {maList.get(i).getVorname(),
                            maList.get(i).getNachname(),
                            maList.get(i).getStraße(),
                            maList.get(i).getHausnummer(),
                            maList.get(i).getPlz(),
                            maList.get(i).getStadt(),
                            maList.get(i).getTelefon(),
                            maList.get(i).getEmail(),
                            maList.get(i).getGebDatum(),
                            maList.get(i).getStdWocheSoll(),
                            maList.get(i).getUrlaubstageSoll(),
                            grpApp.getGrpNameById(grpId),
                            stApp.getStatusById(staId).getName(),
                            maList.get(i).getStdVorbereitung(),
                            maList.get(i).getStdMABesprechung()};
            model.insertRow (model.getRowCount(), obj);
        }
        return model;
    }
    
    public DefaultTableModel createMaOverviewByGroup(String gruppenName)
    {
        String[] columnNames = {"ID", "Vorname", "Nachname", "Straße",
                                "Hausnummer", "PLZ", "Stadt", "Telefon",
                                "Email", "Geburtsdatum", "Std/Woche",
                                "Urlaubstage", "Gruppenname", "Status",
                                "Vorbereitung",
                                "MA Besprechung"};

        ArrayList <Mitarbeiter> maList = kita.getMa();
        DefaultTableModel model = new DefaultTableModel();
        GruppenApp grpApp = new GruppenApp(this.kita, conn);
        ArrayList <Gruppe> alGrp = new ArrayList <Gruppe>();
        JTable table = new JTable(model);

        //insert Columns
        for (int i = 0 ; i < columnNames.length; i++)
        {
            model.addColumn(columnNames[i]);
        }

        for (int i = 0; i < maList.size(); i++)
        {
            int grpID = maList.get(i).getGrpID();

            if (grpApp.getGrpNameById(grpID).equals(gruppenName)) {
                int staId = maList.get(i).getStatusID();
                StatusApp stApp = new StatusApp(this.kita, conn);

            Object []obj = {maList.get(i).getId(), 
                            maList.get(i).getVorname(),
                            maList.get(i).getNachname(),
                            maList.get(i).getStraße(),
                            maList.get(i).getHausnummer(),
                            maList.get(i).getPlz(),
                            maList.get(i).getStadt(),
                            maList.get(i).getTelefon(),
                            maList.get(i).getEmail(),
                            maList.get(i).getGebDatum(),
                            maList.get(i).getStdWocheSoll(),
                            maList.get(i).getUrlaubstageSoll(),
                            grpApp.getGrpNameById(grpID),
                            stApp.getStatusById(staId).getName(),
                            maList.get(i).getStdVorbereitung(),
                            maList.get(i).getStdMABesprechung()};
            
                model.insertRow (model.getRowCount(), obj);
            }
            
        }
        return model;
    }
}
